package com.tyf.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.google.gson.Gson;
import com.tyf.dao.EmpDaoImpl;
import com.tyf.entity.Emp;
import com.tyf.util.Result;

/**
 * 处理员工相关的请求
 */
@WebServlet("/EmpServlet")
public class EmpServlet extends BaseServlet {
//实例化一个dao的实现类对象，调用他的方法进行测试
	EmpDaoImpl dao = new EmpDaoImpl();

	public void getEmpList(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//1.接收前端的参数
		String name = req.getParameter("name");
		//2. 调用dao层的方法，获取所有员工
		ArrayList<Emp> list = dao.getAllEmp(name);
        // 将员工列表的数据存在请求作用域中
		//req.setAttribute("list", list);
		// 请求转发跳转到指定的页面展示
		//req.getRequestDispatcher("emplist.jsp").forward(req, resp);
		//3.直接将数据响应在页面上
//		Gson g = new Gson();//实例化一个工具类对象
//		String json = g.toJson(list);//使用工具类对象将数据转换为字符串
//		PrintWriter out = resp.getWriter();//获取输出对象
//		out.print(json);//输出数据
//		out.flush();//刷新
//		out.close();//关闭
		
		//3.调用结果工具类，将数据返回
		String res = Result.toClient(0, "员工列表",list,list.size());
		PrintWriter out = resp.getWriter();//获取输出对象
		out.print(res);//输出数据
		out.flush();//刷新
		out.close();//关闭
	}

	public void getEmpById(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// 1.获取客户端传过来的参数
		String id = req.getParameter("id");
		if (id != null && !id.equals("")) {
			int id2 = Integer.valueOf(id);
			// 2.调用dao层的方法，单查
			Emp emp = dao.getEmpById(id2);
			// 3.跳转页面
			req.setAttribute("emp", emp);
			req.getRequestDispatcher("empdetaill.jsp").forward(req, resp);
		}
	}

	public void delEmpById(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.获取客户端传过来的参数
		String id = req.getParameter("id");
		if (id != null && !id.equals("")) {
			int id2 = Integer.valueOf(id);
			// 2.调用dao层的方法，删除
			boolean res = dao.delEmp(id2);
			// 3.跳转页面
			resp.sendRedirect("EmpServlet?method=getEmpList");

		}
	}

	public void addEmp(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// 1.接收客户端传过来的参数（字符串类型）
		String name = req.getParameter("name");
		String sex = req.getParameter("sex");
		String sal = req.getParameter("sal");
		String did = req.getParameter("did");
		String deptName = req.getParameter("deptName");
		String url = req.getParameter("url");
		System.out.println("接收的参数是：" + name + sex + sal);// 页面传过来了吗
		int sal2 = 0;
		if (sal != null && !sal.equals("")) {
			sal2 = Integer.valueOf(sal);
		}
		
		// 2.调用dao层的方法，添加
		Emp emp = new Emp(0, name, sex, sal2,Integer.valueOf(did),deptName,url);
		System.out.println("要添加的员工对象是：" + emp);// 页面传过来的值有没有给对象
		boolean res = dao.insertEmp(emp);
		// 3.判断结果，实现跳转
		if (res == true) {// 添加成功(重定向跳转到查询员工列表方法)
			resp.sendRedirect("EmpServlet?method=getEmpList");
		} else {// 添加失败（转发跳转到添加页面）
			req.setAttribute("res", "添加失败");
			req.getRequestDispatcher("emplist.jsp").forward(req, resp);
		}
	}

	public void updateEmp(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// 1.接收客户端传过来的参数（字符串类型）
		String name = req.getParameter("name");
		String sex = req.getParameter("sex");
		String sal = req.getParameter("sal");
		String id = req.getParameter("id");
		String did = req.getParameter("did");
		String deptName = req.getParameter("deptName");
		System.out.println("接收的参数是：" + name + sex + sal + id);// 页面传过来了吗
		int sal2 = Integer.valueOf(sal);
		int id2 = Integer.valueOf(id);
		// 2.调用dao层的方法，修改
		Emp emp = new Emp(id2, name, sex, sal2,Integer.valueOf(did),deptName);
		boolean res = dao.updateEmp(emp);
		System.out.println("要添加的员工对象是：" + res);// 页面传过来的值有没有给对象
		// 3.判断结果，实现跳转
		if (res == true) {// 添加成功(重定向跳转到查询员工列表方法)
			resp.sendRedirect("EmpServlet?method=getEmpList");
		} else {// 添加失败（转发跳转到添加页面）
			req.setAttribute("res", "添加失败");
			req.getRequestDispatcher("empdetaill.jsp").forward(req, resp);
		}
	}
}
